package org.quickserver.util.state;

import org.apache.commons.lang3.StringUtils;
import org.quickserver.net.model.DevType;
import org.quickserver.util.data.dataProcessing;

import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * @Author: zly
 * @Description : ss254报警解析
 * @Date: 2021-12-01
 */
public class SS254State {

    public SS254State() {
    }
    public static Map<String, String> getSS254State(String[] strs,String analysisType) {
        Map<String, String> map = new HashMap();
        int[] d = dataProcessing.henTo2(strs[0]);
        int[] g = dataProcessing.henTo2(strs[1]);
        int strLen1 = d.length;
        int strLen2 = g.length;
        d = Arrays.copyOf(d, strLen1 + strLen2);
        System.arraycopy(g, 0, d, strLen1, strLen2);
        d = reverse(d,d.length);
        /*Alarmbit报警状态 Faultbit故障状态 Linkbit使能状态 Limitbit 电力报警状态*/
        for(int i = 0; i < d.length; ++i) {
            switch(i) {
                case 0:
                    switch(d[i]) {
                        case 0:

                            if("Linkbit".equals(analysisType)){
                                map.put(DevType.loudian.getCode()+DevType.tdguangbi.getCode(),DevType.loudian.getName()+DevType.tdguangbi.getName());
                            }else if("Limitbit".equals(analysisType)){
                                map.put(DevType.guoya.getCode()+DevType.normal.getCode(),DevType.guoya.getName()+DevType.normal.getName());
                            } else{
                                map.put(DevType.loudian.getCode()+DevType.normal.getCode(), DevType.loudian.getName()+DevType.normal.getName());
                            }
                            continue;
                        default:
                            continue;
                        case 1:
                            if("Limitbit".equals(analysisType)){
                                map.put(DevType.guoya.getCode()+DevType.alarm.getCode(),DevType.guoya.getName()+DevType.alarm.getName());
                            }else if("Linkbit".equals(analysisType)){
                                map.put(DevType.loudian.getCode()+DevType.tdkaiqi.getCode(),DevType.loudian.getName()+DevType.tdkaiqi.getName());
                            }else if("Alarmbit".equals(analysisType)){
                                map.put(DevType.loudian.getCode()+DevType.alarm.getCode(),DevType.loudian.getName()+DevType.alarm.getName());
                            }else if("Faultbit".equals(analysisType)){
                                map.put(DevType.loudian.getCode()+DevType.fault.getCode(),DevType.loudian.getName()+DevType.fault.getName());
                            }
                            continue;
                    }
                case 1:
                    switch(d[i]) {
                        case 0:
                            if("Linkbit".equals(analysisType)){
                                map.put(DevType.wdOne.getCode() + DevType.tdguangbi.getCode(),DevType.wdOne.getName() + DevType.tdguangbi.getName());
                            }else if("Limitbit".equals(analysisType)){
                                map.put(DevType.qianya.getCode()+DevType.normal.getCode(),DevType.qianya.getName()+DevType.normal.getName());
                            }else {
                                map.put(DevType.wdOne.getCode() + DevType.normal.getCode(),DevType.wdOne.getName() + DevType.normal.getName());
                            }
                            continue;
                        default:
                            continue;
                        case 1:
                            if("Faultbit".equals(analysisType)){
                                map.put(DevType.wdOne.getCode() + DevType.fault.getCode(),DevType.wdOne.getName() + DevType.fault.getName());
                            }else if("Linkbit".equals(analysisType)){
                                map.put(DevType.wdOne.getCode() + DevType.tdkaiqi.getCode(),DevType.wdOne.getName() + DevType.tdkaiqi.getName());
                            }else if("Limitbit".equals(analysisType)){
                                map.put(DevType.qianya.getCode()+DevType.alarm.getCode(),DevType.qianya.getName()+DevType.alarm.getName());
                            }else{
                                map.put(DevType.wdOne.getCode() + DevType.alarm.getCode(),DevType.wdOne.getName() + DevType.alarm.getName());
                            }
                            continue;
                    }
                case 2:
                    switch(d[i]) {
                        case 0:
                            if("Linkbit".equals(analysisType)){
                                map.put(DevType.wdTwo.getCode() + DevType.tdguangbi.getCode(),DevType.wdTwo.getName() + DevType.tdguangbi.getName());
                            }else if("Limitbit".equals(analysisType)){
                                map.put(DevType.quexiang.getCode()+DevType.normal.getCode(),DevType.quexiang.getName()+DevType.normal.getName());
                            }else{
                                map.put(DevType.wdTwo.getCode() + DevType.normal.getCode(),DevType.wdTwo.getName() + DevType.normal.getName());
                            }
                            continue;
                        case 1:
                            if("Faultbit".equals(analysisType)){
                                map.put(DevType.wdTwo.getCode() + DevType.fault.getCode(),DevType.wdTwo.getName() + DevType.fault.getName());
                            }else if("Linkbit".equals(analysisType)){
                                map.put(DevType.wdTwo.getCode() + DevType.tdkaiqi.getCode(),DevType.wdTwo.getName() + DevType.tdkaiqi.getName());
                            }else if("Limitbit".equals(analysisType)){
                                map.put(DevType.quexiang.getCode()+DevType.alarm.getCode(),DevType.quexiang.getName()+DevType.alarm.getName());
                            }else{
                                map.put(DevType.wdTwo.getCode() + DevType.alarm.getCode(),DevType.wdTwo.getName() + DevType.alarm.getName());
                            }
                            continue;
                        default:
                            continue;
                    }
                case 3:
                    switch(d[i]) {
                        case 0:
                            if("Linkbit".equals(analysisType)){
                                map.put(DevType.wdThree.getCode() + DevType.tdguangbi.getCode(),DevType.wdThree.getName() + DevType.tdguangbi.getName());
                            }else if("Limitbit".equals(analysisType)){
                                map.put(DevType.guoliu.getCode()+DevType.normal.getCode(),DevType.guoliu.getName()+DevType.normal.getName());
                            }else{
                                map.put(DevType.wdThree.getCode() + DevType.normal.getCode(),DevType.wdThree.getName() + DevType.normal.getName());
                            }
                            continue;
                        case 1:
                            if("Faultbit".equals(analysisType)){
                                map.put(DevType.wdThree.getCode() + DevType.fault.getCode(),DevType.wdThree.getName() + DevType.fault.getName());
                            }else if("Linkbit".equals(analysisType)){
                                map.put(DevType.wdThree.getCode() + DevType.tdkaiqi.getCode(),DevType.wdThree.getName() + DevType.tdkaiqi.getName());
                            }else if("Limitbit".equals(analysisType)){
                                map.put(DevType.guoliu.getCode()+DevType.alarm.getCode(),DevType.guoliu.getName()+DevType.alarm.getName());
                            }else{
                                map.put(DevType.wdThree.getCode() + DevType.alarm.getCode(),DevType.wdThree.getName() + DevType.alarm.getName());
                            }
                            continue;
                        default:
                            continue;
                    }
                case 4:
                    switch(d[i]) {
                        case 0:
                            if("Linkbit".equals(analysisType)){
                                map.put(DevType.wdFour.getCode() + DevType.tdguangbi.getCode(),DevType.wdFour.getName() + DevType.tdguangbi.getName());
                            }else if("Faultbit".equals(analysisType)){
                                map.put(DevType.wdFour.getCode() + DevType.normal.getCode(),DevType.wdFour.getName() + DevType.normal.getName());
                            }else if("Limitbit".equals(analysisType)){
                                map.put(DevType.guozai.getCode()+DevType.normal.getCode(),DevType.guozai.getName()+DevType.normal.getName());
                            }else{
                                map.put(DevType.wdFour.getCode() + DevType.normal.getCode(),DevType.wdFour.getName() + DevType.normal.getName());
                            }
                            continue;
                        case 1:
                            if("Faultbit".equals(analysisType)){
                                map.put(DevType.wdFour.getCode() + DevType.fault.getCode(),DevType.wdFour.getName() + DevType.fault.getName());

                            }else if("Linkbit".equals(analysisType)){
                                map.put(DevType.wdFour.getCode() + DevType.tdkaiqi.getCode(),DevType.wdFour.getName() + DevType.tdkaiqi.getName());
                            }else if("Limitbit".equals(analysisType)){
                                map.put(DevType.guozai.getCode()+DevType.alarm.getCode(),DevType.guozai.getName()+DevType.alarm.getName());

                            }else{
                                map.put(DevType.wdFour.getCode() + DevType.alarm.getCode(),DevType.wdFour.getName() + DevType.alarm.getName());
                            }
                            continue;
                        default:
                            continue;
                    }
                case 5:break;
                case 6:break;
                case 7:break;
                case 8:
                    switch(d[i]) {
                        case 0:
                            if("Alarmbit".equals(analysisType)){
                                map.put(DevType.DI1ldnomal.getCode(),DevType.DI1ldnomal.getName());
                            }else if("Linkbit".equals(analysisType)) {
                                // 应该只用Linkbit到这里
                                map.put(DevType.DI1dk.getCode(),DevType.DI1dk.getName());
                            }
                            continue;
                        default:
                            continue;
                        case 1:
                            if("Alarmbit".equals(analysisType)){
                                map.put(DevType.DI1ldalarm.getCode(),DevType.DI1ldalarm.getName());
                            }else if("Linkbit".equals(analysisType)) {
                                // 应该只用Linkbit到这里
                                map.put(DevType.DI1bh.getCode(),DevType.DI1bh.getName());
                            }
                            continue;
                    }
                case 9:
                    switch(d[i]) {
                        case 0:
                            if("Alarmbit".equals(analysisType)){
                                map.put(DevType.DI2ldnomal.getCode(),DevType.DI2ldnomal.getName());

                            } else if("Linkbit".equals(analysisType)) {
                                // 应该只用Linkbit到这里
                                map.put(DevType.DI2dk.getCode(),DevType.DI2dk.getName());
                            }
                            continue;
                        default:
                            continue;
                        case 1:
                            if("Alarmbit".equals(analysisType)){
                                map.put(DevType.DI2ldalarm.getCode(),DevType.DI2ldalarm.getName());
                            }else if("Linkbit".equals(analysisType)){
                                // 应该只用Linkbit到这里
                                map.put(DevType.DI2bh.getCode(),DevType.DI2bh.getName());
                            }
                            continue;
                    }

                case 10:
                    //到这里应该就只剩Linkbit
                    switch(d[i]) {
                        case 0:
                            if("Linkbit".equals(analysisType)){
                            map.put(DevType.DI01dk.getCode(), DevType.DI01dk.getName());
                        }
                            continue;
                        case 1:
                            if("Linkbit".equals(analysisType)) {
                                map.put(DevType.DI01bh.getCode(), DevType.DI01bh.getName());
                            }
                            continue;
                        default:
                            continue;
                    }
                case 11:
                    //到这里应该就只剩Linkbit
                    switch(d[i]) {
                        case 0:
                            if("Linkbit".equals(analysisType)) {
                                map.put(DevType.DI02dk.getCode(), DevType.DI02dk.getName());
                            }
                            break;
                        case 1:
                            if("Linkbit".equals(analysisType)) {
                                map.put(DevType.DI02bh.getCode(), DevType.DI02bh.getName());
                            }
                            break;
                        default:
                            break;
                    }

                    break;
            }

        }
        return map;
    }
    public static Map<String, String> getCodeAndJx(Map<String,String> map){
        Map<String, String> rMap = new HashMap();

        String[] keyArrays = map.keySet().toArray(new String[map.size()]);
        rMap.put("codes",StringUtils.join(keyArrays,","));
        Collection<String> values = map.values();
        rMap.put("jx",StringUtils.join(values,","));
        return rMap;

    }

    public static int[] reverse(int a[], int n)
    {
        int[] b = new int[n];
        int j = n;
        for (int i = 0; i < n; i++) {
            b[j - 1] = a[i];
            j = j - 1;
        }
        return b;
    }
}
